//=======================================================
// 作者：KingSley
// 描述：
//=======================================================
using UnityEngine;
using System.Collections;
using System.Xml;
using System.IO;
using UnityEngine.UI;
using System;

namespace Babybus.Uno
{
    public class XMLManager : MonoBehaviour
    {
        private ArrayList Adialogue = new ArrayList();
        private ArrayList Bdialogue = new ArrayList();
        private ArrayList textList = new ArrayList();
        private Text text;

        // Use this for initialization
        void Start()
        {
            text = GameObject.Find("Text").GetComponent<Text>();
        }

        void OnGUI()
        {
            if (GUI.Button(new Rect(50, 50, 100, 50), "生成XML"))
            {
                CreateXML();
                Debug.Log("生成XML");
            }

            if (GUI.Button(new Rect(50, 100, 100, 50), "读取XML"))
            {
                LoadXml();
                Debug.Log("读取XML");
            }

            if (GUI.Button(new Rect(50, 150, 100, 50), "修改XML"))
            {
                updateXML();
                Debug.Log("修改XML");

            }

            if (GUI.Button(new Rect(50, 200, 100, 50), "增加XML节点"))
            {
                addXMLData();
                Debug.Log("增加XML");
            }
        }

        void CreateXML()
        {
            string path = Application.dataPath + @"/Resources/XMLStudy.xml";
            if (!File.Exists(path))
            {
                //创建最上一层的节点。
                XmlDocument xml = new XmlDocument();
                //创建最上一层的节点。
                XmlElement root = xml.CreateElement("objects");
                //创建子节点
                XmlElement element = xml.CreateElement("messages");
                //设置节点的属性
                element.SetAttribute("id", "1");
                XmlElement elementChild1 = xml.CreateElement("contents");

                elementChild1.SetAttribute("name", "a");
                //设置节点内面的内容
                elementChild1.InnerText = "这就是你，你就是天狼";
                XmlElement elementChild2 = xml.CreateElement("mission");
                elementChild2.SetAttribute("map", "abc");
                elementChild2.InnerText = "去吧，少年，去实现你的梦想";
                //把节点一层一层的添加至xml中，注意他们之间的先后顺序，这是生成XML文件的顺序
                element.AppendChild(elementChild1);
                element.AppendChild(elementChild2);
                root.AppendChild(element);
                xml.AppendChild(root);
                //最后保存文件
                xml.Save(path);
            }
        }


        void LoadXml()
        {
            //创建xml文档
            XmlDocument xml = new XmlDocument();

            xml.Load(Application.dataPath + @"/Resources/XMLStudy.xml");
            //得到objects节点下的所有子节点
            XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
            string str = "";
            
            //遍历所有子节点
            foreach (XmlElement xl1 in xmlNodeList)
            {
                //放到一个textlist文本里
                //textList.Add(xl2.GetAttribute("name") + ": " + xl2.InnerText);
                //得到name为a的节点里的内容。放到TextList里
                if (xl1.GetAttribute("name") == "a")
                {
                    Adialogue.Add(xl1.GetAttribute("name") + ": " + xl1.InnerText);
                    print("******************" + xl1.GetAttribute("name") + ": " + xl1.InnerText);
                }
                //得到name为b的节点里的内容。放到TextList里
                else if (xl1.GetAttribute("map") == "abc")
                {
                    Bdialogue.Add(xl1.GetAttribute("name") + ": " + xl1.InnerText);
                    print("******************" + xl1.GetAttribute("name") + ": " + xl1.InnerText);
                }
            }
            print(xml.OuterXml);

            // 加载XML文件
            xml.Load(Application.dataPath + @"/Resources/XMLStudy2.xml");
            // 获取根节点
            XmlElement root = xml.DocumentElement;
            // 筛选结点
            XmlNodeList listNodes = root.SelectNodes("/bookstore/book/price");
            // 获取List中每一个节点
            foreach(XmlNode node in listNodes)
            {
                // 打印节点内容
                str += node.InnerText;
                str += "\r\n";
            }
            text.text = str;
        }


        //修改
        void updateXML()
        {
            string path = Application.dataPath + @"/Resources/XMLStudy.xml";
            if (File.Exists(path))
            {
                XmlDocument xml = new XmlDocument();
                xml.Load(path);
                XmlNodeList xmlNodeList = xml.SelectSingleNode("objects").ChildNodes;
                foreach (XmlElement xl1 in xmlNodeList)
                {
                    if (xl1.GetAttribute("id") == "1")
                    {
                        //把messages里id为1的属性改为5
                        xl1.SetAttribute("id", "5");
                    }

                    if (xl1.GetAttribute("id") == "2")
                    {
                        foreach (XmlElement xl2 in xl1.ChildNodes)
                        {
                            if (xl2.GetAttribute("map") == "abc")
                            {
                                //把mission里map为abc的属性改为df，并修改其里面的内容
                                xl2.SetAttribute("map", "df");
                                xl2.InnerText = "我成功改变了你";
                            }

                        }
                    }
                }
                xml.Save(path);
            }
        }

        //添加XML
        void addXMLData()
        {
            string path = Application.dataPath + @"/Resources/XMLStudy.xml";
            if (File.Exists(path))
            {
                XmlDocument xml = new XmlDocument();
                xml.Load(path);
                XmlNode root = xml.SelectSingleNode("objects");
                //下面的东西就跟上面创建xml元素是一样的。我们把他复制过来就行了
                XmlElement element = xml.CreateElement("messages");
                //设置节点的属性
                element.SetAttribute("id", "2");
                XmlElement elementChild1 = xml.CreateElement("contents");

                elementChild1.SetAttribute("name", "b");
                //设置节点内面的内容
                elementChild1.InnerText = "天狼，你的梦想就是。。。。。";
                XmlElement elementChild2 = xml.CreateElement("mission");
                elementChild2.SetAttribute("map", "def");
                elementChild2.InnerText = "我要妹子。。。。。。。。。。";
                //把节点一层一层的添加至xml中，注意他们之间的先后顺序，这是生成XML文件的顺序
                element.AppendChild(elementChild1);
                element.AppendChild(elementChild2);

                root.AppendChild(element);

                xml.AppendChild(root);
                //最后保存文件
                xml.Save(path);
            }
        }
    }
}
